home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / drweb_overflow.nasl < prev    next >
Text File  |  2005-01-14  |  3KB  |  134 lines

  1. #
  2. # (C) Tenable Network Security
  3. #
  4. # See the Nessus Scripts License for details
  5. #
  6.  
  7. if(description)
  8. {
  9.  script_id(11625);
  10.  script_bugtraq_id(7022);
  11.  
  12.  script_version("$Revision: 1.3 $");
  13.  
  14.  name["english"] = "DrWeb Folder Name Overflow";
  15.  
  16.  script_name(english:name["english"]);
  17.  
  18.  desc["english"] = "
  19. The remote host is running DrWeb - an antivirus.
  20.  
  21. There is a flaw in the remote version of Dr.Web which may make it crash 
  22. when scanning files whose name is excessively long.
  23.  
  24. An attacker may use this flaw to execute arbitrary code on this host.
  25. To exploit it, an attacker would need to send a file to the remote host
  26. and have it scanned by this software.
  27.  
  28. Solution : Upgrade to version 4.29b or newer
  29. Risk factor : High";
  30.  
  31.  
  32.  
  33.  script_description(english:desc["english"]);
  34.  
  35.  summary["english"] = "Determines the presence of Dr.Web";
  36.  
  37.  script_summary(english:summary["english"]);
  38.  
  39.  script_category(ACT_GATHER_INFO);
  40.  
  41.  script_copyright(english:"This script is Copyright (C) 2003 Tenable Network Security");
  42.  family["english"] = "Windows";
  43.  script_family(english:family["english"]);
  44.  
  45.  script_dependencies("netbios_name_get.nasl",
  46.               "smb_login.nasl","smb_registry_access.nasl");
  47.  script_require_keys("SMB/name", "SMB/login", "SMB/password",
  48.              "SMB/WindowsVersion",
  49.              "SMB/registry_access");
  50.  
  51.  script_require_ports(139, 445);
  52.  exit(0);
  53. }
  54.  
  55.  
  56. include("smb_nt.inc");
  57.  
  58.  
  59.  
  60. rootfile = registry_get_sz(key:"SOFTWARE\DialogueScience\DrWeb", item:"Path");
  61. if(!rootfile)
  62. {
  63.  exit(0);
  64. }
  65. else
  66. {
  67.  share = ereg_replace(pattern:"([A-Z]):.*", replace:"\1$", string:rootfile);
  68.  exe =  ereg_replace(pattern:"[A-Z]:(.*)", replace:"\1", string:rootfile);
  69.  }
  70.  
  71.  
  72.  
  73.  
  74. name     =  kb_smb_name();
  75. login    =  kb_smb_login();
  76. pass      =  kb_smb_password(); 
  77. domain     =  kb_smb_domain();
  78. port    =  kb_smb_transport();
  79. if(!port) port = 139;
  80.  
  81.  
  82. if(!get_port_state(port))exit(0);
  83.  
  84. soc = open_sock_tcp(port);
  85. if(!soc)exit(0);
  86.  
  87.  
  88.  
  89. r = smb_session_request(soc:soc, remote:name);
  90. if(!r)exit(0);
  91.  
  92. prot = smb_neg_prot(soc:soc);
  93. if(!prot)exit(0);
  94.  
  95. r = smb_session_setup(soc:soc, login:login, password:pass, domain:domain, prot:prot);
  96. if(!r)exit(0);
  97.  
  98. uid = session_extract_uid(reply:r);
  99.  
  100.  
  101.  
  102. r = smb_tconx(soc:soc, name:name, uid:uid, share:share);
  103. tid = tconx_extract_tid(reply:r);
  104. if(!tid)exit(0);
  105.  
  106. fid = OpenAndX(socket:soc, uid:uid, tid:tid, file:exe);
  107. if(fid != 0)
  108. {
  109.  fsize = smb_get_file_size(socket:soc, uid:uid, tid:tid, fid:fid);
  110.  
  111.  off = fsize - 16384;
  112.  data = ReadAndX(socket:soc, uid:uid, tid:tid, fid:fid, count:16384, off:off);
  113.  data = str_replace(find:raw_string(0), replace:"", string:data);
  114.  
  115.  version = strstr(data, "ProductVersion");
  116.  if(!version)exit(0);
  117.  for(i=strlen("ProductVersion");i<strlen(version);i++)
  118.  {
  119.  if((ord(version[i]) < ord("0") ||
  120.     ord(version[i]) > ord("9")) && 
  121.     version[i] != ".")break;
  122.  else 
  123.    v += version[i];
  124.  if("4.29" >< v)
  125.      v = v + version[i];
  126.  
  127.  set_kb_item(name:"DrWeb/Version", value:v);
  128.     
  129.  if(ereg(pattern:"([123]\..*|4\.([0-9][^0-9]|1[0-9]|2[0-8]|29a?))", string:v))
  130.      security_warning(port);
  131. }
  132.